/**********************************************************************/
/* Programa: COMPRESOR 
Este programa es el encargado del manejo de TDA - cola del compresor
Integrantes        : Catalina Windmuller, Ayelén Tamiozzo y Francisco Soler               
Fecha              : 17 de abril de 2011                                 
Versión            : 01                                                     
Nombre del archivo : colac */

/**********************************************************************/


#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include "cola.h"

/**********************************************************************/
/**********************************************************************/
/* Crear_Cola: Ver cola.h */
bool crear_cola(tcola *cola )
{
  cola->frente = cola->final = NULL;
  cola->largo = 0;
  return true;
}

/**********************************************************************/
/* se pide memoria y se inicializa un nuevo nodo */
tnodoc crear_nodo (tdatoc elemento)
{
  tnodoc aux ;
  aux = (tnodoc)malloc(sizeof(struct tnodo));
  aux->dato = elemento;
  aux->siguiente = NULL;
  return aux;
}

/**********************************************************************/
/* cola_vacia: ver cola.h */
bool cola_vacia (tcola cola )
{
  return cola.frente ==NULL;
}

/**********************************************************************/
/* insertar_cola: ver cola.h */
bool insertar_cola (tcola *cola , tdatoc elemento)
{
  tnodoc  aux ;
  aux = crear_nodo(elemento);
  if (cola_vacia(*cola) )
  {
    cola->frente =aux ;
  }
  else
  {
    cola->final->siguiente = aux;
					 }
  cola->final = aux;
  cola->largo++;
  return true;
}

/**********************************************************************/
/* borrar_cola: ver cola.h */
bool borrar_cola (tcola *cola, tdatoc *elemento){
	tnodoc a ;
	if (cola_vacia(*cola))
	return false;
	*elemento = cola->frente->dato;
	a = cola->frente;
    cola->frente = cola->frente->siguiente;
    free (a);
    cola->largo--;
    return true;
}

/**********************************************************************/
/* ver_frente: ver cola.h */                
bool ver_frente (tcola cola, tdatoc *elemento){
	if (cola_vacia (cola))
		return false;
    *elemento = cola.frente->dato;
    return true;
}

/**********************************************************************/
/* destruir_cola: ver cola.h */
bool destruir_cola (tcola *cola ){
	tnodoc n ;
    while (cola->frente!= NULL ) {
       n = cola->frente;
       cola->frente = cola->frente->siguiente;
       free ( n ) ;
    }
    return true;
}

/**********************************************************************/
/* ver_largo_cola: ver cola.h */                
size_t ver_largo_cola (tcola cola) {
	return cola.largo;
}

/**********************************************************************/
